جزوه · فصل نهم · جلسه ۸۱ · اصول اولیه اسکریپت‌نویسی ← بازگشت به فهرست
📘 فصل نهم · جلسه ۸۱ اصول اولیه اسکریپت‌نویسی
📅 تاریخ: چهارشنبه، ۳ شهریور ۱۴۰۵ 👤 مدرس: محمد عابدینی 🐚 Zsh · 🐧 Debian (کالی) · 📦 Red Hat
این جلسه یکی از مباحث پایه‌ای و مهم در اسکریپت‌نویسی است. مفهوم Shell Scripting، اجرای چند فرمان، عملگرهای && و || و انتقال خروجی حتماً در آزمون می‌آید.
📜 قبل از شروع، یه مثال ساده:

فرض کن یه دستور پخت داری که باید مراحل رو به ترتیب انجام بدی. اول مواد رو آماده کن، بعد طبخ کن، بعد سرو کن. توی لینوکس، اسکریپت (Script) دقیقاً همینه: یه سری دستورات که به ترتیب اجرا می‌شن. این جلسه بهت یاد میده چطور این دستورات رو به هم وصل کنی، شرط بذاری و خروجی‌ها رو مدیریت کنی!

▍ Shell Scripting چیست؟

Shell Scripting به معنی نوشتن یک سری دستورات در یک فایل متنی است که به‌صورت متوالی اجرا می‌شوند. این کار به شما امکان می‌دهد:

🔑 نکته کلیدی: بهترین شل‌ها برای اسکریپت‌نویسی، Bash و Ksh هستند. در این دوره، روی Bash تمرکز می‌کنیم.
نکته امتحانی: Bash و Ksh بهترین شل‌ها برای اسکریپت‌نویسی هستند.

▍ اجرای چند فرمان در یک خط

با استفاده از سمی‌کالن (;) می‌توانید چندین فرمان را در یک خط اجرا کنید، بدون توجه به موفقیت یا شکست هر یک.

┌──(ya3in㉿kali)-[~] └─$ date; free; uname -a Thu Aug 22 10:55:26 PM +0330 2024 total used free shared buff/cache available Mem: 16155124 3661100 8962536 603140 4443916 12494024 Swap: 0 0 0 0 0 0 Linux Mabedini 6.1.0-23-amd64 #1 SMP PREEMPT DYNAMIC Debian 6.1.99-1 (2024-07-15) x86_64 GNU/Linux

توضیح: سه دستور date، free و uname -a به ترتیب اجرا می‌شوند.

نکته: ; همه دستورات را بدون در نظر گرفتن موفقیت یا شکست اجرا می‌کند.

▍ عملگر Logical AND (&&)

&& (AND) فرمان دوم را فقط در صورتی اجرا می‌کند که فرمان اول با موفقیت (کد خروجی ۰) اجرا شده باشد.

┌──(ya3in㉿kali)-[~] └─$ mkdir test_dir && echo "Directory created successfully" Directory created successfully

توضیح: اگر mkdir test_dir موفق باشد، پیام چاپ می‌شود. در غیر این صورت، پیام چاپ نمی‌شود.

&& یعنی «اگر دستور اول موفق بود، دستور دوم را اجرا کن».

▍ عملگر Logical OR (||)

|| (OR) فرمان دوم را فقط در صورتی اجرا می‌کند که فرمان اول با شکست (کد خروجی غیر از ۰) مواجه شده باشد.

┌──(ya3in㉿kali)-[~] └─$ ping -c 1 192.168.200.100 > /dev/null || echo "Host not up" Host not up

توضیح: اگر ping به آدرس ۱۹۲.۱۶۸.۲۰۰.۱۰۰ ناموفق باشد، پیام «Host not up» چاپ می‌شود.

|| یعنی «اگر دستور اول شکست خورد، دستور دوم را اجرا کن».

▍ ترکیب && و ||

می‌توانید این دو عملگر را با هم ترکیب کنید تا منطق پیچیده‌تری بسازید:

┌──(ya3in㉿kali)-[~] └─$ command1 && command2 || command3

توضیح: اگر command1 موفق باشد، command2 اجرا می‌شود. اگر command1 شکست بخورد، command3 اجرا می‌شود.

▍ انتقال خروجی (Redirection)

با استفاده از > و >> می‌توانید خروجی یک فرمان را به یک فایل هدایت کنید.

🔵 > (بازنویسی)

  • خروجی را در فایل ذخیره می‌کند.
  • اگر فایل وجود داشته باشد، محتوای قبلی پاک می‌شود.
  • اگر فایل وجود نداشته باشد، ساخته می‌شود.

🟢 >> (افزودن)

  • خروجی را به انتهای فایل اضافه می‌کند.
  • محتوای قبلی حفظ می‌شود.
  • اگر فایل وجود نداشته باشد، ساخته می‌شود.
┌──(ya3in㉿kali)-[~] └─$ echo "Hello" > file.txt └─$ echo "World" >> file.txt └─$ cat file.txt Hello World

توضیح: > فایل را با «Hello» بازنویسی می‌کند و >> «World» را به انتهای آن اضافه می‌کند.

> بازنویسی می‌کند، >> به انتها اضافه می‌کند.

▍ ورودی از فایل (<)

با < می‌توانید ورودی یک فرمان را از یک فایل بخوانید.

┌──(ya3in㉿kali)-[~] └─$ cat < file.txt Hello World

توضیح: cat محتوای فایل file.txt را به عنوان ورودی می‌خواند.

▍ Pipe (|)

| (Pipe) خروجی یک فرمان را به عنوان ورودی فرمان دیگر می‌فرستد.

┌──(ya3in㉿kali)-[~] └─$ ls -la | grep ".txt" -rw-r--r-- 1 ya3in ya3in 12 Aug 26 10:00 file.txt

توضیح: خروجی ls -la به grep داده می‌شود تا فقط خطوط حاوی «.txt» را نمایش دهد.

| خروجی فرمان اول را به ورودی فرمان دوم می‌دهد.

▍ جمع‌بندی عملگرها و انتقال‌ها

عملگر کاربرد مثال
; اجرای چند فرمان پشت سر هم date; whoami
&& اجرای فرمان دوم در صورت موفقیت فرمان اول mkdir test && echo "OK"
|| اجرای فرمان دوم در صورت شکست فرمان اول ping 1.1.1.1 || echo "Down"
> بازنویسی خروجی در فایل echo "Hi" > file.txt
>> افزودن خروجی به انتهای فایل echo "Bye" >> file.txt
< ورودی از فایل cat < file.txt
| انتقال خروجی به ورودی فرمان دیگر ls | grep ".txt"
✅ جمع‌بندی نهایی:
  • Shell Scripting: نوشتن دستورات در یک فایل برای اجرای خودکار.
  • ; → اجرای همه دستورات (بدون شرط).
  • && → «اگر موفق بود، انجام بده».
  • || → «اگر شکست خورد، انجام بده».
  • > → بازنویسی فایل.
  • >> → افزودن به انتهای فایل.
  • < → ورودی از فایل.
  • | → خروجی به ورودی فرمان بعدی.